package demo3;

import java.util.Comparator;
import java.util.PriorityQueue;

public class Lambda {


    // Lambda的函数式接口：
    @FunctionalInterface
    interface NoParameterNoReturn1 {
        //注意：只能有一个方法
        void test();
    }

    public static void main03(String[] args) {

        // 变量捕获：这个变量要么是被final修饰，如果不是被final修饰的 你要保证在使用 之前，没有修改
        int a=10;
        //a=20;
        PriorityQueue<String> priorityQueue=new PriorityQueue<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {

                return o1.compareTo(o2)+a;
            }
        });

        // 简写
        PriorityQueue<String> priorityQueue2=new PriorityQueue<>(((o1, o2) -> o1.compareTo(o2)));
    }

    //有返回值无参数
    @FunctionalInterface
    interface NoParameterReturn {
        int test();
    }
    //有返回值一个参数
    @FunctionalInterface
    interface OneParameterReturn {
        int test(int a);
    }
    //有返回值多参数
    @FunctionalInterface
    interface MoreParameterReturn {
        int test(int a,int b);
    }
    public static void main02(String[] args) {
        NoParameterReturn noParameterReturn=()-> 100;
        System.out.println(noParameterReturn.test());

        OneParameterReturn oneParameterReturn=(a)-> a+10;
        System.out.println(oneParameterReturn.test(10));

        MoreParameterReturn moreParameterReturn=(a,b)-> a+b;
        System.out.println(moreParameterReturn.test(10, 20));
    }



    //无返回值无参数
    @FunctionalInterface
    interface NoParameterNoReturn {
        void test();
    }

    //无返回值一个参数
    @FunctionalInterface
    interface OneParameterNoReturn {
        void test(int a);
    }

    //无返回值多个参数
    @FunctionalInterface
    interface MoreParameterNoReturn {
        void test(int a,int b);
    }
    public static void main01(String[] args) {
        NoParameterNoReturn noParameterNoReturn=()-> System.out.println("lambda的无参数test方法");
        noParameterNoReturn.test();

        OneParameterNoReturn oneParameterNoReturn=(a)-> System.out.println("lambda的一个参数test方法"+a);
        oneParameterNoReturn.test(10);

        MoreParameterNoReturn  moreParameterNoReturn=(a,b)-> System.out.println("lambda的多个参数test方法" + a + b);;
        moreParameterNoReturn.test(10,20);
    }
}
